(function () {
    // 公共类
    class Animal {
        name: string
        age: number
        constructor(name: string, age: number) {
            this.name = name
            this.age = age
        }
        sayHello() {
            console.log('动物叫')
        }
    }
    // 以下为继承
    // Animal 为父类，继承后，子类会拥有父类所有的方法及属性
    // 通过继承可以将多个类共有的代码写在一个父类中
    class Dog extends Animal {
        // 扩展方法
        run() {
            console.log(`${this.name}在跑`)
        }
        // 如果子类中添加了和父类相同的方法，则子类方法会覆盖父方法
        // 重写父类方法
        sayHello() {
            console.log('汪汪汪')
        }
    }
    class Cat extends Animal {
        sayHello() {
            console.log('喵喵喵')
        }
    }
    const dog = new Dog('旺财', 10)
    const cat = new Cat('咪咪', 3)
    console.log(dog)
    dog.sayHello()
    dog.run()
    console.log(cat)
    cat.sayHello()
})()

